snapcast: add Snapcast from badaix/snapos as is
authorSzabolcs Hubai <[email protected]>
Wed, 17 Apr 2024 22:18:44 +0000 (00:18 +0200)
committerTianling Shen <[email protected]>
Tue, 9 Sep 2025 04:57:14 +0000 (12:57 +0800)
Add Snapcast package files as is from
https://github.com/badaix/snapos/tree/29a5daebb0513faa825b12474125c0c2dd66c2ee/openwrt/snapcast

Co-authored-by: badaix <[email protected]>
Co-authored-by: David Andreoletti <[email protected]>
Co-authored-by: luciferin <[email protected]>
Signed-off-by: Szabolcs Hubai <[email protected]>
sound/snapcast/Makefile [new file with mode: 0644]
sound/snapcast/files/snapclient.init [new file with mode: 0755]
sound/snapcast/files/snapserver.init [new file with mode: 0755]

diff --git a/sound/snapcast/Makefile b/sound/snapcast/Makefile
new file mode 100644 (file)
index 0000000..a7c2291
--- /dev/null
@@ -0,0 +1,117 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME := snapcast
+PKG_VERSION := 0.27.0
+PKG_RELEASE := $(PKG_SOURCE_VERSION)
+PKG_USE_MIPS16 := 0
+
+# PKG_MIRROR_HASH=skip
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/badaix/snapcast.git
+PKG_SOURCE_VERSION:=v0.27.0
+PKG_BUILD_DIR:=$(BUILD_DIR)/snapcast-$(PKG_VERSION)
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+CMAKE_OPTIONS += -DBUILD_TESTS=OFF
+
+define Package/snapcast/Default
+       SECTION := sound
+       CATEGORY := Sound
+       TITLE := Synchronous multiroom audio player
+       DEPENDS := +AUDIO_SUPPORT:alsa-lib +libstdcpp +libavahi-client +libatomic +libogg +libflac +libopus +boost +libsoxr
+       URL := https://github.com/badaix/snapcast
+endef
+
+define Package/snapcast/description/Default
+       Synchronous audio player
+endef
+
+define Package/snapcast
+       $(call Package/snapcast/Default)
+       TITLE += packages
+endef
+
+define Package/snapcast/description
+       $(call Package/snapcast/description/Default)
+       Snapcast is a multi-room client-server audio player, 
+       where all clients are time synchronized with the server 
+       to play perfectly synced audio
+endef
+
+define Package/snapserver
+       $(call Package/snapcast/Default)
+       TITLE += Snapserver
+       DEPENDS += +AUDIO_SUPPORT:alsa-lib +libvorbis +libsoxr
+       HIDDEN := 1
+endef
+
+define Package/snapclient
+       $(call Package/snapcast/Default)
+       TILE += Snapclient
+       DEPENDS += +libvorbisidec +libsoxr
+       HIDDEN := 1
+endef
+
+define Package/snapserver/description
+       $(call Package/snapcast/description/Default)
+       Snapcast server
+endef
+
+define Package/snapclient/description
+       $(call Package/snapcast/description/Default)
+       Snapcast client
+endef
+
+define Package/snapcast/config
+       menu "Select Snapcast Options"
+               depends on PACKAGE_snapcast
+               comment "Choose server or client"
+               config PACKAGE_snapserver
+                       prompt "Snapserver"
+                       help
+                               Snapcast server
+                       default n
+
+               config PACKAGE_snapclient
+                       prompt "Snapclient"
+                       help
+                               Snapcast client
+                       default y
+       endmenu
+endef
+
+define Package/snapcast/Default/install
+       true
+endef
+
+define Package/snapserver/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/snapserver $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/snapserver.init $(1)/etc/init.d/snapserver
+       $(INSTALL_DIR) $(1)/etc/default
+       $(INSTALL_BIN) $(CURDIR)/../../debian/snapserver.default $(1)/etc/default/snapserver
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/server/etc/snapserver.conf $(1)/etc/snapserver.conf
+endef
+
+define Package/snapclient/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/snapclient $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/snapclient.init $(1)/etc/init.d/snapclient
+       $(INSTALL_DIR) $(1)/etc/default
+       $(INSTALL_BIN) $(CURDIR)/../../debian/snapclient.default $(1)/etc/default/snapclient
+endef
+
+$(eval $(call BuildPackage,snapserver))
+$(eval $(call BuildPackage,snapclient))
+$(eval $(call BuildPackage,snapcast))
diff --git a/sound/snapcast/files/snapclient.init b/sound/snapcast/files/snapclient.init
new file mode 100755 (executable)
index 0000000..9bace4b
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh /etc/rc.common
+# Author: Johannes Pohl <[email protected]>
+START=90
+
+USE_PROCD=1
+
+NAME=snapclient
+PROG=/usr/bin/$NAME
+PID_FILE=/var/run/$NAME.pid
+CONFIG_FILE=/etc/default/$NAME
+
+
+start_service()
+{
+       local autostart opts
+
+       autostart=$(grep ^START_SNAPCLIENT $CONFIG_FILE |cut -d= -f2)
+       [ "$autostart" != "true" ] && logger -t $NAME "Not starting due to START_SNAPCLIENT" && exit 0
+
+       opts=$(grep ^SNAPCLIENT_OPTS $CONFIG_FILE |cut -d "\"" -f2)
+       opts="--logsink system $opts"
+
+       procd_open_instance
+       procd_set_param command $PROG
+       procd_append_param command $opts
+       procd_set_param pidfile $PID_FILE
+       procd_set_param respawn # use the defaults for respawing crashed process
+       procd_set_param stderr 1
+       procd_set_param stdout 1
+       procd_close_instance
+}
diff --git a/sound/snapcast/files/snapserver.init b/sound/snapcast/files/snapserver.init
new file mode 100755 (executable)
index 0000000..0747fe9
--- /dev/null
@@ -0,0 +1,31 @@
+#!/bin/sh /etc/rc.common
+# Author: Johannes Pohl <[email protected]>
+START=90
+
+USE_PROCD=1
+
+NAME=snapserver
+PROG=/usr/bin/$NAME
+PID_FILE=/var/run/$NAME.pid
+CONFIG_FILE=/etc/default/$NAME
+
+
+start_service()
+{
+       local autostart opts
+
+       autostart=$(grep ^START_SNAPSERVER $CONFIG_FILE |cut -d= -f2)
+       [ "$autostart" != "true" ] && logger -t $NAME "Not starting due to START_SNAPSERVER" && exit 0
+
+       opts=$(grep ^SNAPSERVER_OPTS $CONFIG_FILE |cut -d "\"" -f2)
+       opts="--logging.sink system $opts"
+
+       procd_open_instance
+       procd_set_param command $PROG
+       procd_append_param command $opts
+       procd_set_param pidfile $PID_FILE
+       procd_set_param respawn # use the defaults for respawing crashed process
+       procd_set_param stderr 1
+       procd_set_param stdout 1
+       procd_close_instance
+}